Scrapbox ChatGPT Connectorの仕組み
1 Scrapbox jsonの各行を「埋め込みベクトル」に変換する
埋め込みベクトルとは「数字列」くらいの認識で良い
(実際は、この数字列から元の行内容を取り出すために (行内容, 数字列) という対応で保存している)
要はプログラムが扱えるように文章データを数値データに変えている
2 1を全部実施すると、埋め込みベクトルの配列が出来上がる
3 プロンプトも埋め込みベクトルにする
4 3と2の類似度を計算し、2を「似ている順」でソート
これの上位を取り出して、プロンプトとする
ChatGPTに入力できるプロンプトには上限があるのでこうして絞らないといけない。ここでは「最も似ている行ベストn」を採用しているsta.icon
内部的には高度なことをやっているのだろうが、このconnectorはほぼOpenAI APIを呼び出しているだけ 類似度計算に数学の知識(内積、コサイン類似度と言っている)は使っているようだが ただし埋め込みベクトルベースの類似度計算自体に必然性はない
「似てる順」である必然性はないので、例えばScrapboxのURLを渡して「このページと関連リンクのページを更新順に読んで」でもいい
4000トークンを超えてくると何らかの方法で選抜することが必要になる。この選抜の方法はいろいろあり得るけど、その一つの方法として埋め込みベクトルの類似度を使う方法があるというだけの話